home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / nails.py < prev    next >
Encoding:
Python Source  |  2000-11-16  |  7.9 KB  |  279 lines

  1. #----------------------------------------------------------------------
  2. #   Proposito : Futil intento de automatizar la trampa 
  3. #              de pinchos para las futuras generaciones
  4. #
  5. #   Culpable  : Jose Dario Halle Cano
  6. #
  7. #   ToDo      : Sonidos y Polvo
  8. #----------------------------------------------------------------------
  9. """
  10. --------------------------------------------------------
  11. ---                      Ejemplo                     ---
  12. --------------------------------------------------------
  13.  
  14. import nails
  15.  
  16. #  crea la trampa
  17.  
  18. trampa =   nails.NailTrap(5000,2000,15000)
  19.  
  20. # Agrega las puertas
  21. trampa.AddSector(       19058, 10085, -4519 )
  22. trampa.AddSector(       19027, 10085, -1514 )
  23. trampa.AddSector(       18521, 10085, 1049  )
  24.  
  25. #define que sectores activaran la trampa
  26. trampa.ActivationSector(19027, 10085, -1514 )
  27.  
  28. # Agrega todo los objetos Pincho o afines asociados a la trampa
  29. trampa.AddPincho("Pinch1")
  30. trampa.AddPincho("Pinch2")
  31. trampa.AddPincho("Pinch3")
  32. trampa.AddPincho("Pinch4")
  33. trampa.AddPincho("Pinch5")
  34. trampa.AddPincho("Pinch6")
  35.  
  36. ------------------------------------------------------------------------
  37. """
  38.  
  39. import Doors
  40. import Bladex
  41. import Room
  42. import Sounds
  43. import ObjStore
  44.  
  45. TP_Opened   = 0
  46. TP_Working  = 1
  47.  
  48. ################################################################################################################
  49.  
  50. Sonido_Trampa_Activada = Bladex.CreateSound('..\\..\\Sounds\\trap-clicked.wav', 'SonidoActivacion')
  51. Sonido_Trampa_Activada.Volume=1
  52. Sonido_Trampa_Activada.MinDistance=15000
  53. Sonido_Trampa_Activada.MaxDistance=20000
  54.  
  55. Sonido_Trampa_Bajando    = Sounds.CreateEntitySound('..\\..\\Sounds\\stone-slide-and-hit.wav', 'SonidoPiedra')
  56. Sonido_Trampa_Bajando.Volume=1
  57. Sonido_Trampa_Bajando.MinDistance=15000
  58. Sonido_Trampa_Bajando.MaxDistance=20000
  59.  
  60. Sonido_Trampa_Subiendo   = Sounds.CreateEntitySound('..\\..\\Sounds\\drawbridge-loop.wav', 'SonidoCadena1')
  61. Sonido_Trampa_Subiendo.Volume=1
  62. Sonido_Trampa_Subiendo.MinDistance=15000
  63. Sonido_Trampa_Subiendo.MaxDistance=20000
  64.  
  65. Sonido_Trampa_Reactivada = Sounds.CreateEntitySound('..\\..\\Sounds\\metal-lever3.wav', 'SonidoReactivacion')
  66. Sonido_Trampa_Reactivada.Volume=1
  67. Sonido_Trampa_Reactivada.MinDistance=15000
  68. Sonido_Trampa_Reactivada.MaxDistance=20000
  69.  
  70. Sonido_Trampa_Hit        = Sounds.CreateEntitySound('..\\..\\Sounds\\Stone-door-shut.wav', 'Hit2')
  71. Sonido_Trampa_Hit.Volume=1
  72. Sonido_Trampa_Hit.MinDistance=15000
  73. Sonido_Trampa_Hit.MaxDistance=20000
  74.  
  75. ################################################################################################################
  76.  
  77. TrapList={}
  78.  
  79. def PinchosSiguenTecho(self):    
  80.  
  81.      for Puert in self.agujas:
  82.         Pincho = Bladex.GetEntity(Puert)
  83.         X      = Pincho.Position[0]
  84.         Z      = Pincho.Position[2]
  85.         D      = self.sectores[0].sld_area().Displacement    
  86.         Y      = self.ypos + D
  87.         Pincho.Position = X,Y,Z
  88.  
  89.      if self.State <> TP_Opened:
  90.         Bladex.AddScheduledFunc(Bladex.GetTime()+0.025, PinchosSiguenTecho, (self,))
  91.   
  92.   
  93.  
  94. def SeteaElValue(self):
  95.   self.State = TP_Opened
  96.  
  97. def AbreteSesamus(self):
  98.   self.OpenTrap()  
  99.   Bladex.AddScheduledFunc(Bladex.GetTime()+10.0, SeteaElValue, (self,))
  100.     
  101.     
  102. def MataAlJugador():
  103.   char      = Bladex.GetEntity("Player1")
  104.   #char.Life = 0
  105.  
  106. def EntroElIluso(sectorindex,entityname):
  107.   # Muere estupido Iluso  
  108.   sec = TrapList[sectorindex]
  109.   if sec.Active:
  110.      if sec.State == TP_Opened:
  111.         sec.CloseTrap()
  112.         if entityname == "Player1":
  113.           Bladex.AddScheduledFunc(Bladex.GetTime()+1.0, MataAlJugador, ())
  114.  
  115.  
  116. #
  117. # Clase que implementa una trampa de pinchos
  118. #---------------------------------------------
  119. class NailTrap:
  120.    
  121.   def __init__(self,Tam,Ups,Downs):
  122.     self.ObjId=ObjStore.GetNewId() # Para identificarlo al grabar/guardar
  123.     ObjStore.ObjectsStore[self.ObjId]=self
  124.     self.agujas      = [ ]
  125.     self.sectores    = [ ]
  126.     self.size        = Tam
  127.     self.Active      = 1
  128.     self.SpeedOn     = Downs
  129.     self.SpeedOff    = Ups
  130.     self.State       = TP_Opened
  131.     self.SoundX      = None
  132.     self.SoundY      = None
  133.     self.SoundZ      = None
  134.     self.ypos        = 0
  135.  
  136.   def __del__(self):
  137.     del ObjStore.ObjectsStore[self.ObjId]
  138.  
  139.   def persistent_id(self):
  140.     return self.ObjId
  141.  
  142.   def __getstate__(self):
  143.     return (1,
  144.             self.ObjId,
  145.             self.agujas,
  146.             self.sectores,
  147.             self.size,
  148.             self.Active,
  149.             self.SpeedOn,
  150.             self.SpeedOff,
  151.             self.State,
  152.             self.SoundX,
  153.             self.SoundY,
  154.             self.SoundZ,
  155.             self.ypos,
  156.            )
  157.  
  158.   def __setstate__(self,parm):
  159.     if parm[0]==1:
  160.       self.ObjId=parm[1]
  161.       ObjStore.ObjectsStore[self.ObjId]=self
  162.       self.agujas=parm[2]
  163.       self.sectores=parm[3]
  164.       self.size=parm[4]
  165.       self.Active=parm[5]
  166.       self.SpeedOn=parm[6]
  167.       self.SpeedOff=parm[7]
  168.       self.State=parm[8]
  169.       self.SoundX=parm[9]
  170.       self.SoundY=parm[10]
  171.       self.SoundZ=parm[11]
  172.       self.ypos=parm[12]
  173.     else:
  174.       print "Version mismatch in BreakSector"
  175.       self.ObjId=ObjStore.GetNewId() # Para identificarlo al grabar/guardar
  176.       ObjStore.ObjectsStore[self.ObjId]=self
  177.       self.agujas      = [ ]
  178.       self.sectores    = [ ]
  179.       self.size        = 1
  180.       self.Active      = 1
  181.       self.SpeedOn     = 0
  182.       self.SpeedOff    = 0
  183.       self.State       = 0
  184.       self.SoundX      = 0
  185.       self.SoundY      = 0
  186.       self.SoundZ      = 0
  187.       self.ypos        = 0
  188.  
  189.   def AddPincho(self,Name):
  190.      self.agujas.append(Name)
  191.      ob = Bladex.GetEntity(Name)
  192.      self.ypos = ob.Position[1]
  193.  
  194.  
  195.   def AddSector(self,x,y,z):
  196.      
  197.      Puerta_Pinchos=Doors.CreateDoor("PuertaPinchos"+`len(self.sectores)`, (x,y,z), (0,1,0), 50, self.size, Doors.OPENED)
  198.      Puerta_Pinchos.Squezze = 1
  199.      
  200.      Puerta_Pinchos.opentype       = Doors.UNIF
  201.      Puerta_Pinchos.o_med_vel      = -abs(self.SpeedOff)
  202.      Puerta_Pinchos.o_med_displ    = self.size
  203.      Puerta_Pinchos.OnEndOpenFunc  = ""
  204.      
  205.      Puerta_Pinchos.closetype      = Doors.AC
  206.      Puerta_Pinchos.c_init_vel     = 0
  207.      Puerta_Pinchos.c_init_displ   = self.size
  208.      Puerta_Pinchos.c_med_vel      = abs(self.SpeedOn)
  209.      Puerta_Pinchos.OnEndCloseFunc = ""
  210.      
  211.      if(len(self.sectores) == 0):
  212.           Puerta_Pinchos.SetWhileOpenSound(Sonido_Trampa_Subiendo)
  213.           Puerta_Pinchos.SetEndOpenSound(Sonido_Trampa_Reactivada)
  214.           
  215.           Puerta_Pinchos.SetWhileCloseSound(Sonido_Trampa_Bajando)
  216.           Puerta_Pinchos.SetEndCloseSound(Sonido_Trampa_Hit)
  217.  
  218.      
  219.      self.sectores.append(Puerta_Pinchos)
  220.      
  221.   def ActivationSector(self,x,y,z):
  222.      
  223.      Sec                                = Bladex.GetSector(x,y,z)
  224.      Sec.OnEnter                        = EntroElIluso
  225.      TrapList[Sec.Index]                = self
  226.      self.SoundX                        = x
  227.      self.SoundY                        = y
  228.      self.SoundZ                        = z
  229.  
  230.  
  231.   def OpenTrap(self):
  232.       self.State = TP_Working      
  233.       # sectors
  234.       for Puert in self.sectores:
  235.          Puert.OpenDoor()
  236.  
  237.   def CloseTrap(self):      
  238.       self.State = TP_Working
  239.       PinchosSiguenTecho(self)
  240.       
  241.       # Pinchos
  242.       Sonido_Trampa_Activada.Play(self.SoundX,self.SoundY,self.SoundZ)
  243.       
  244.       # sectors
  245.       for Puert in self.sectores:
  246.          Puert.CloseDoor()
  247.          Bladex.AddScheduledFunc(Bladex.GetTime()+3.0, AbreteSesamus, (self,))
  248.  
  249.  
  250.  
  251.  
  252. def SaveData(filename):
  253.   import cPickle
  254.  
  255.   funcfile=open(filename,"wt")
  256.   p=cPickle.Pickler(funcfile)
  257.   d=(
  258.      TrapList,
  259.     )
  260.   p.dump(d)
  261.   funcfile.close()
  262.  
  263.  
  264. def LoadData(filename):
  265.   import cPickle
  266.  
  267.   funcfile=open(filename,"rt")
  268.   p=cPickle.Unpickler(funcfile)
  269.   d=p.load()
  270.   funcfile.close()
  271.   print d
  272.  
  273.   global TrapList
  274.  
  275.   TrapList    = d[0]
  276.  
  277. import GameState
  278. GameState.ModulesToBeSaved.append(__import__(__name__))
  279.